package local.app.server_audits;

import local.app.servers.Server;

import java.io.BufferedWriter;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;

public class MultiChecker extends Thread {
    private final Server server;
    private final BufferedWriter fileWriter;
    private final CountDownLatch latch;

    public MultiChecker(Server server, BufferedWriter fileWriter, CountDownLatch latch) {
        this.server = server;
        this.fileWriter = fileWriter;
        this.latch = latch;
    }

    @Override
    public void run() {
        System.out.println("Начало проверки - " + server.getNameServer() + " " + server.getIpAddress());
        StringBuilder result = new StringBuilder();
        ServerChecker checker = new ServerChecker(server);
        result.append("\n").append(server.getNameServer()).append("\n");
        result.append(server.getIpAddress()).append("\n");
        // Определение доступности сервера по IP-адресу с помощью ping
//        boolean isServerAvailable = checker.pingServer();
//        result.append("Доступность сервера: ").append(isServerAvailable ? "доступен" : "недоступен");
//
//        if (isServerAvailable) {
//            // Выполнение аутентификации через SSH
//            boolean isAuthenticationSuccessful = checker.authenticateSSH();
//            result.append("\nSSH authentication: ").append(isAuthenticationSuccessful ? "successful" : "failed");
//
//            if (isAuthenticationSuccessful) {
//                // Получение версии операционной системы
//                String osVersion = checker.getOSVersion();
//                result.append("\nOS info: ").append(osVersion);
//            }
//        }
        // Определение доступности сервера по IP-адресу с помощью ping
        result.append("Доступность сервера: ").append(checker.pingServer() ? "доступен ✅\uFE0F" : "недоступен ❌\uFE0F");

        // Выполнение аутентификации через SSH
        result.append("\nSSH authentication: ").append(checker.authenticateSSH() ? "успешно ✅\uFE0F" : "не удалось ❌\uFE0F");

        // Получение версии операционной системы
        result.append("\nOS info: ").append(checker.getOSVersion());
        result.append("\n--------------------------------------");
        synchronized (fileWriter) {
            try {
//                System.out.printf("====== Идет запись ======\n" +
//                                "====== %s - %s =================%n%n",
//                        server.getNameServer(), server.getIpAddress());
                fileWriter.write(result.toString());
            } catch (IOException e) {

                System.out.printf("====== Ошибка записи - %s======\n" +
                                "======== %s ============================ ERROR%n%n",
                        server.getNameServer(), server.getIpAddress());
                throw new RuntimeException(e);
            }

        }
        System.out.printf("Закончена проверка - %s\n" +
                          "====== %s ============================ ОК%n%n",
                server.getNameServer(), server.getIpAddress());

        latch.countDown();


    }
}

